function checksum = getModelChecksum(modelName, varargin)
%GETMODELCHECKSUM 获取Simulink模型的校验和
%   【当前文档依然适用于本函数。已基于DO-178项目开发规则（适配MATLAB 2025a），完整描述了本函数输入/输出、流程与依赖。】
%   此函数用于计算并返回指定Simulink模型的校验和值，支持DO-178C合规性建模、版本控制及完整性验证场景。
%   支持顶层模型与引用模型两种校验和计算模式。自动检测并载入与模型同名的数据字典（DD_[ModelName].sldd）。
%
%【语法】
%   checksum = getModelChecksum(modelName)
%   checksum = getModelChecksum(modelName, 'TreatAsTopMdl')
%
%【输入参数】
%   modelName        Simulink模型名称（字符串）
%
%【可选参数】
%   'TreatAsTopMdl'  若指定，则以顶层模型模式计算校验和，否则作为模型引用模式
%
%【输出参数】
%   checksum         模型校验和值（字符串或数值类型）
%
%【实现说明】
%   - 检查数据字典DD_[ModelName]是否存在，若存在则自动加载（保证计算一致性，便于DO-178验证溯源）
%   - 加载模型到内存
%   - 参数支持两种计算模式
%   - 调用do178c.internal.getModelChecksum执行实际计算
%
%【数据字典支持】
%   文件名规范：'DD_[ModelName].sldd'，需位于MATLAB路径下
%
%【典型用途】
%   - 模型版本比对、变更追踪、持续集成
%   - DO-178合规性校验场景
%   - 模型交付物完整性确认
%
%【依赖】
%   exist, evalin, load_system, do178c.internal.getModelChecksum
%
%【相关】
%   Simulink.data.dictionary, load_system, do178c.internal.getModelChecksum
%   （文档主体内容与原先版本一致，仍然适用2025a及本DO-178工具链流程）
%

if exist(['DD_', modelName], 'file')
    % 若存在同名数据字典，则优先加载（确保一致性/完整性）
    evalin('base', ['DD_', modelName]);
end
load_system(modelName);
if nargin > 1
    checksum = do178c.internal.getModelChecksum(modelName, true);
else
    checksum = do178c.internal.getModelChecksum(modelName, false);
end

end
